package com.the.ui.widge.photoview

import android.content.Context
import android.util.AttributeSet

//  ┏┓　　　┏┓
//┏┛┻━━━┛┻┓
//┃　　　　　　　┃
//┃　　　━　　　┃
//┃　┳┛　┗┳　┃
//┃　　　　　　　┃
//┃　　　┻　　　┃
//┃　　　　　　　┃
//┗━┓　　　┏━┛
//    ┃　　　┃                  神兽保佑
//    ┃　　　┃                  永无BUG！
//    ┃　　　┗━━━┓
//    ┃　　　　　　　┣┓
//    ┃　　　　　　　┏┛
//    ┗┓┓┏━┳┓┏┛
//      ┃┫┫　┃┫┫
//      ┗┻┛　┗┻┛
/**
 * @author The one
 * @date 2021-11-03 16:56
 * @describe 处理下缩放倍数的问题
 * @email 625805189@qq.com
 * @remark
 */
open class PhotoView2
@JvmOverloads constructor(
    context: Context,
    attrs: AttributeSet? = null,
    defStyleAttr: Int = 0,
    defStyleRes: Int = 0
) : PhotoView1(context, attrs, defStyleAttr, defStyleRes) {

    /**
     * TODO 假设图片的宽高为 658*411 ,View 的宽高为 1080*1500
     *      widthScale = 1080/658 ≈ 1.6  heightScale = 1500/411 ≈ 3.64
     *      那么设定 widthScale 为 smallScale , heightScale 为 bigScale
     *      也就是哪个最小比例能充满那边的，就以那边为最小缩放值
     */
    open var smallScale:Float = 0.0f
    open var bigScale:Float = 0.0f
    private val OVER_SCALE :Float = 1.5F

    /**
     * 计算出放大系数
     */
    override fun computeScale() {
        // PhotoView1里默认是按照宽的缩放比例来的
        // 但是此时还有一种情况：父容器为横向 或者 图片为纵向时
        // 整个时候短边就是高了，这个时候按照上面的算法就不行了
        // 下面按照比例来
        // bitmap的宽高比
        val bitmapScale = mBitmap.width.toFloat() / mBitmap.height
        // 屏幕的宽高比
        // 屏幕的宽高比
        val parentScale = width.toFloat() / height

        // 四种情况*（宽>高=横向，反之纵向）

        // 1. 图片是横向的，bitmapScale > 1，父容器是纵向的 screenScale < 1
        //      --- bitmapScale > screenScale，宽的缩放比最小

        // 2. 图片是横向的，bitmapScale > 1，父容器是横向的 screenScale > 1
        //      --- bitmapScale > screenScale，宽的缩放比最小
        //      --- bitmapScale < screenScale，高的缩放比最小

        // 3. 图片是纵向的，bitmapScale < 1，父容器是横向的 screenScale > 1
        //      --- bitmapScale < screenScale，高的缩放比最小

        // 4. 图片是纵向的，bitmapScale < 1，父容器是纵向的 screenScale < 1
        //      --- bitmapScale > screenScale，宽的缩放比最小
        //      --- bitmapScale < screenScale，高的缩放比最小

        // 综上得出
        if (bitmapScale > parentScale) {
            // 宽的缩放比最小
            smallScale = width.toFloat() / mBitmap.width
            bigScale = height.toFloat() / mBitmap.height *OVER_SCALE
        } else {
            // 高的缩放比最小
            smallScale = height.toFloat() / mBitmap.height
            bigScale = width.toFloat() / mBitmap.width*OVER_SCALE
        }

        // 默认初始值以小放大比列
        currentScale = smallScale
    }


}